/**
 * 使用OpenAI SDK生成标题建议
 */

import { settings } from '../core/settings.ts';
import { getApiClient, handleApiError, callApiDirectly } from './apiClient.ts';

/**
 * 生成标题建议
 * @param content 文章内容
 * @returns 标题建议列表
 */
export async function generateTitleSuggestions(
  content: string
): Promise<string[]> {
  try {
    // 获取用户选择的模型或使用默认模型
    const selectedModel = await settings.get('selected_model');
    const modelName = selectedModel || 'deepseek-chat';
    
    console.log(`生成标题建议，使用模型: ${modelName}, 内容长度: ${content.length}`);
    
    // 获取API客户端
    const { client, error } = await getApiClient(modelName);
    
    if (error) {
      console.error(`获取API客户端失败: ${error}`);
      return getDefaultTitles();
    }
    
    if (!client) {
      console.error('无法创建API客户端');
      return getDefaultTitles();
    }
    
    // 使用内容开头部分生成标题建议
    const prompt = `根据以下内容，生成5个可能的标题，直接返回标题列表，每行一个，不要有多余解释:\n\n${content.substring(0, 1000)}`;
    
    try {
      console.log(`发送标题生成请求: model=${modelName}`);
      
      // 构建消息 - 确保角色字段格式正确
      const formattedMessages = [
        {
          role: 'system' as const,
          content: '你是一位小说写作助手，专长于根据故事内容生成引人入胜的标题。请直接提供标题建议，每行一个，不要添加任何额外文字。'
        },
        {
          role: 'user' as const,
          content: prompt
        }
      ];

      // 使用直接API调用
      const response = await callApiDirectly(
        modelName,
        formattedMessages,
        {
          temperature: 0.7,
          max_tokens: 200,
          stream: false
        }
      );
      
      // 确保响应内容是字符串
      const content = response.choices?.[0]?.message?.content || '';
      if (typeof content !== 'string') {
        console.error('API返回了非字符串内容:', content);
        throw new Error('API返回了无效的响应格式');
      }
      
      console.log(`收到标题建议响应, 长度: ${content.length}`);
      
      // 处理返回的标题列表
      return processTitleResponse(content);
    } catch (error) {
      console.error('生成标题建议失败:', error);
      console.error('错误详情:', handleApiError(error, modelName));
      return getDefaultTitles();
    }
  } catch (error) {
    console.error('生成标题建议时发生错误:', error);
    return getDefaultTitles();
  }
}

/**
 * 处理标题响应
 * @param response API响应内容
 * @returns 标题列表
 */
function processTitleResponse(response: string): string[] {
  return response
    .split('\n')
    .map((title) => title.trim())
    // 去掉数字前缀和冒号
    .map((title) => title.replace(/^\d+[\.:]\s*/, ''))
    // 去掉引号
    .map((title) => title.replace(/^["']|["']$/g, ''))
    // 去掉"标题"前缀
    .filter((title) => title && !title.startsWith('标题'))
    // 最多返回5个
    .slice(0, 5);
}

/**
 * 获取默认标题列表
 * @returns 默认标题建议
 */
function getDefaultTitles(): string[] {
  return [
    "未命名章节",
    "新的开始",
    "转折点",
    "意外发现",
    "隐藏的真相"
  ];
} 